const Koa = require('koa');
const KoaRouter = require('koa-router');
const static = require('koa-static');
const bodyParser = require('koa-bodyparser');
const jwt = require('jsonwebtoken');
// 检查请求头中的 Authorization => token
// 根据传入的 secret 去校验这个 token
// 如果成功，就可以从 ctx.state 中拿到 token 解析出来的信息
// 如果失败，就会响应 401
const jwtAuth = require('koa-jwt');
const SECRET = "it's a secret";

// 全局引入
// app.use(jwtAuth({ secret: SECRET }));

// 创建实例
const app = new Koa();
const router = new KoaRouter();

app.use(bodyParser());
app.use(static(__dirname));

// 登录
router.post('/login', async (ctx) => {
    const { username } = ctx.request.body;
    // 登录逻辑，略过
    const user = { username };
    // ...
    // const payload = {
    //     user,
    //     // 设置 token 过期时间，一小时后，单位：秒
    //     // 因为使用了 jwtAuth，所以要这样设置
    //     // exp: Math.floor(Date.now() / 1000) + 60 * 60,
    // };

    // 生成 token 返回
    const token = jwt.sign(user, SECRET, { expiresIn: '1h' });

    // 响应成功
    ctx.body = {
        code: 200,
        data: {
            user,
            token,
        },
        message: '登录成功',
    };
});

router.get(
    '/users/current',
    jwtAuth({
        secret: SECRET,
    }),
    async (ctx) => {
        // 读取 user 信息
        console.log(ctx.state.user);

        // 返回响应
        ctx.body = {
            code: 200,
            data: {
                user: ctx.state.user,
            },
            message: '获取数据成功',
        };
    }
);

app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000);
